<?php
/**
 * Created by PhpStorm.
 * User: shutao
 * Date: 2018/9/18
 * Time: 08:02
 */

namespace wechat\services;

use ttcommon\base\Data;

// 你的 ide 必须支持中文注释显示（如 Hack, monaco,...），才能够显示下面的提示文字

/**
 * IDE 辅助显示
 *
 * ```
 * ---- 公共属性 ---
 * toUserName 接收方账号（该公众号 ID）wxa176b17f182c1d12 （18位)
 * fromUserName 发送方账号（OpenID，代表用户的唯一标识） ocYxcuBt0mRugKZ7tGAHPnUaOW7Y （28位）
 * createTime integer:消息创建时间戳
 * msgId integer:消息创建时间（64位整数）
 * msgType 消息的类型
 *
 * <<<< msgType:text 文本
 * content text 文本消息内容
 *
 * <<<< msgType:image 图片
 * mediaId 图片消息媒体id，可以调用多媒体文件下载接口拉取数据。
 * picUrl image 图片链接
 *
 * <<<< msgType:voice 语音
 * mediaId 语音消息媒体id，可以调用多媒体文件下载接口拉取数据
 * format voice 语音格式，如 amr，speex 等
 * recognition voice 开通语音识别后才有，通常值为 *
 * 请注意，开通语音识别后，用户每次发送语音给公众号时，微信会在推送的语音消息XML数据包中，增加一个 `Recongnition` 字段
 *
 * <<<< msgType:video 视频
 * mediaId 视频消息媒体id，可以调用多媒体文件下载接口拉取数据。
 * thumbMediaId 视频消息缩略图的媒体id，可以调用多媒体文件下载接口拉取数据
 *
 * <<<< msgType:shortvideo 小视频
 * mediaId 视频消息媒体id，可以调用多媒体文件下载接口拉取数据。
 * thumbMediaId 视频消息缩略图的媒体id，可以调用多媒体文件下载接口拉取数据
 *
 * <<<< msgType:event 事件
 * event 事件类型 （如：subscribe(订阅)、unsubscribe(取消订阅) ...， CLICK 等）（未验证）
 *      subscribe 订阅
 *      unsubscribe 取消订阅
 *      scan 扫描带参数二维码事件
 *      location 上报地理位置事件
 *      click 自定义菜单事件
 *      view 点击菜单中的链接
 *
 * # 自定义菜单事件
 * eventKey 事件KEY值，与自定义菜单接口中KEY值对应，如：CUSTOM_KEY_001, www.qq.com
 *
 * # 扫描带参数二维码事件
 * eventKey 事件KEY值，比如：qrscene_123123，qrscene_为前缀，后面为二维码的参数值；对于自定义菜单事件 事件KEY值，与自定义菜单接口中KEY值对应，如：CUSTOM_KEY_001, www.qq.com
 * ticket 二维码的 ticket，可用来换取二维码图片
 *
 * # 上报地理位置事件
 * double latitude 地理位置纬度 23.137466
 * double longitude 地理位置经度 113.352425
 * double precision 地理位置精度 119.385040
 *
 * <<<< msgType:location 地理位置
 * double location_X 地理位置纬度
 * double location_Y 地理位置经度
 * double scale 地图缩放大小
 * label 地理位置信息
 *
 * <<<< msgType:link 链接
 * title 消息标题
 * description 消息描述
 * url 消息链接
 *
 * <<<< msgType:file 文件
 * title 文件名
 * description 文件描述，可能为 null
 * fileKey 文件 KEY
 * fileMd5 文件 MD5
 * fileTotalLen 文件大小，单位字节
 * ```
 *
 * @property string toUserName
 * @property string fromUserName
 * @property integer createTime
 * @property integer msgId
 * @property string msgType
 * @property string content
 * @property string mediaId
 * @property string picUrl
 * @property string format
 * @property string recognition
 * @property string thumbMediaId
 * @property string event
 * @property string eventKey
 * @property string ticket
 * @property double latitude
 * @property double longitude
 * @property double precision
 * @property double location_X
 * @property double location_Y
 * @property double scale
 * @property string label
 * @property string title
 * @property string description
 * @property string url
 * @property string fileKey
 * @property string fileMd5
 * @property integer fileTotalLen
 */
class WeChatMessage
{
    private $_message;
    /**
     * @var array 公众号的配置 ['id','appid', 'appsecret', 'token', 'encodingaeskey', 'debug', 'domain', 'type']
     */
    public $config = [];

    public function __get($name)
    {
        return Data::hasValue($this->_message, ucfirst($name));
    }

    /**
     * WeChatMessage constructor.
     * @param $message
     */
    public function __construct($message)
    {
        $this->_message = $message;
    }
}